下面是很早之前跟一个豆瓣友邻交流的内容。
漫步者说:
最近在学lisp,对编程语言有了一些新的认识。从最开始的c、c++、java,然后接触了perl、python、ruby、haskell、prolog、clojure,到现在的lisp,也算是了解了不少语言了,却渐渐失去了学习新语言的动力。
开始学新语言是抱着这样一个想法,学习一些新的语言,开拓眼界,从多方面认识编程(记得有句话大致是说,一个新的语言能让你对编程有不同的认识,你才算是学到了一门有价值的新语言)。但是,学到现在已经不觉得哪门语言可以让我对编程的认识有大的改观。lisp中的宏已经好像已经涉及到了解释器和编译器的领域了,不仅仅是编程语言,而是在创造编程语言了。
现在感觉语言只是一种工具,各门语言有其适用的地方和自身的局限性,足够用就OK了,不必刻意追求新的语言,在实际工作中,用的也是主流的c++、java。
是不是对新的编程语言的追求是该止步于lisp,还是我的学习范围狭窄了些?
kim,请问你对此有何看法?
- C++11标准中合并了不少函数式语言应有的特征,使得原本更像是一个摆设的STL的函数库能够更加高效方便的利用。
- 微软现在在力推F#,一个基于OCaml的.net CLR上的函数式编程语言,Visual Studio里面已经集成了进来,C#也从中汲取了不少精华。
- GitHub有一个项目(coffee-js/languages/issues),是一些国内的编程语言理论爱好者开的,利用issue来作为论坛,其中就有很多想法来创造下一代的编程语言。
一方面,编程语言是基本工具,而对工具的改进则能够更好的方便我们进行创作和表达。另一方面,编程语言是计算机科学和其他科学衔接的接口,准确性、科学性和可靠性是其追求的目标。
所以,其实如果说最初尝试学习新的语言是为了长见识和学习新的思想方法的话,那么接下来就是要把这些思想方法到实践中去了,当然,如果可能,能够创造出更加有效的方法来改进工具,则又是一种境界了。
其实,现在的“新”东西不多,函数式编程随着Lisp诞生的,已经半个世纪多了,而广泛应用于生产实践也是近十几年的事情了(ISO C++就有<functional>
头文件的)。只是很多时候因为编程语言的限制或者是意识尚未达到而没有真正能够被绝大多数人接受。比如从C/Java转到Perl/Python的程序员可能还是写出之前的计数的for循环而不会想到列表处理在这些动态类型语言里面是有多方便;还有比如习惯了Java的过度设计的传统的人对于bottom-up的设计思维肯定不太能够适应等等。
也许Lisp真的是编程语言的终极境界了,但谁说的准呢?Lisp虽然能够把程序和数据给统一形式了,可是毕竟还是区分“程序”和“数据”的。现在REST风格的ROA(面向资源)设计特别的盛行,而且面向文档的NoSQL数据库也是另一个趋势,“数据”甚至已经变得要比“程序”重要很多了,也许很有可能未来的程序设计语言就会是只有数据描述,根本就不需要过程控制的呢?XML也是一种“语言”(虽然也是一种变形了的Lisp),或许以后越来越多这种语言反倒会成为优势啊。
我不认为编程语言是会在哪里终结,而可能会融合。和人工智能结合以产生更智能的编译器,和交互工程相结合来提供更加人性化的接口,和自然语言处理/机器学习相结合来让他们拥有真正的“智能”;当你感觉不到编程语言的存在但仍然能够察觉到编程思想带来的更舒适的体验的时候,也许还可能会怀念着现在敲代码的感觉吧。